package  org.com.blbl.highQualityUp;

import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;

import java.io.IOException;

/*
1.类名: HighQualityUpReducer
2.继承: 该类继承自 Reducer，这是 Hadoop MapReduce 框架中的一个核心类。
3.类型参数:
第一个 Text 表示输入的键类型（在这里是 UP 主的名称）。
第二个 Text 表示输入的值类型（在这里是每周必看期数，作为字符串）。
第三个 Text 表示输出的键类型（同样是 UP 主的名称）。
第四个 Text 表示输出的值类型（最大每周必看期数，作为字符串）。
*/
public class HighQualityUpReducer extends Reducer<Text, Text, Text, Text> {
    @Override
    protected void reduce(Text key, Iterable<Text> values, Context context) throws IOException, InterruptedException {
        //maxWeeklyCount 被初始化为 0，用于存储当前 UP 主的最大每周必看期数。
        int maxWeeklyCount = 0;

        //找到每个up主的最大每周必看期数
        //使用增强的 for 循环遍历 values 中的每个 Text 值。
        for (Text value : values) {
            //将每个 Text 值转换为整数（每周必看期数）。
            int weeklyCount = Integer.parseInt(value.toString());
            //如果当前的 weeklyCount 大于 maxWeeklyCount，则更新 maxWeeklyCount。
            if (weeklyCount > maxWeeklyCount) {
                maxWeeklyCount = weeklyCount;
            }
        }
        //使用 context.write 方法将 UP 主的名称（key）和其最大每周必看期数（maxWeeklyCount）作为输出。
        //maxWeeklyCount 被转换为 Text 类型，以便与输出类型匹配。
        context.write(key, new Text(String.valueOf(maxWeeklyCount))); // 输出up主和最大每周必看期数
    }
}
